package main

import "fmt"

// 只要实现了接口中的方法 ，那就可以直接使用。
// 接口分两部分，值和类型

type animal interface {
	move()
	eatting(string2 string)
}

type cat struct {
	name string
}

type dog struct {
	name string
}

// cat
func (c cat)move() {
	fmt.Printf("%s:猫步", c.name)
}

func (c cat)eatting(string2 string)  {
	fmt.Printf("%s吃%s", c.name, string2)
}

// dog

func (d dog)move() {
	fmt.Printf("%s:狗跳", d.name)
}

func (d dog)eatting(string2 string) {
	fmt.Printf("%s吃", d.name)
}

func main() {
	var a1 animal
	fmt.Printf("%T\n", a1)

	t1 := cat{
		name: "tom",
	}

	fmt.Printf("%T\n", t1)
	a1 = t1
	a1.eatting("鱼")
	fmt.Printf("%T", a1)

	d1 := dog{name: "柴犬"}

	a1 = d1   // 结构体的方法参数也要随着接口的参数增加
	a1.move()


}


